﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Conexion;
using System.Data.SqlClient;
using AccesoDatos.Objetos;

namespace AccesoDatos.Manejador
{
    public class Manejador_Empleado_Captura
    {
        ClsConexion conexion = new ClsConexion();
        public objRH objeto = new objRH();
        public int id_actual, id2, id3;
        public DateTime fecha;
        //Guarda empleado, llama al procedimiento "sp_RH_GuardaEmpleado" 
         public bool GuardarEmpleado(
                                    string nombre, string apellidos, string puesto, string departamento,string idsucursal, int idjefe, string cuenta_banco,int estatus, string empresa,
                                    string mensual, string quincenal, int estatus1,string bono, string dia,
                                    string tipo, DateTime fecha_inicio, DateTime fecha_fin, int entregado,int fisico, int estatus2 )
        {        
           try
            {
                List<ClsParametros> lista = new List<ClsParametros>();
              
                 //cat_empleados
	             lista.Add(new ClsParametros("@Nombre",nombre));
	             lista.Add(new ClsParametros("@Apellidos",apellidos));
	             lista.Add(new ClsParametros("@Puesto", puesto));
	             lista.Add(new ClsParametros("@Departamento",departamento));
	             lista.Add(new ClsParametros("@IdSucursal",idsucursal.ToString())); 
	             lista.Add(new ClsParametros("@IdJefe",idjefe.ToString()));
	             lista.Add(new ClsParametros("@CuentaBanco",cuenta_banco)); 
	             lista.Add(new ClsParametros("@Estatus",estatus.ToString()));
                 lista.Add(new ClsParametros("@empresa", empresa));

                 //RH_sueldo
	             lista.Add(new ClsParametros("@Mensual",mensual)); 
	             lista.Add(new ClsParametros("@Quincenal", quincenal));
	             lista.Add(new ClsParametros("@Estatus1", estatus1.ToString())); 
	             lista.Add(new ClsParametros("@Bono",bono));
                 lista.Add(new ClsParametros("@sueldo_dia", dia));
	
	
	            //RH_empleado_contrato
	             lista.Add(new ClsParametros("@Tipo", tipo)); 
	             lista.Add(new ClsParametros("@Fecha_inicio", fecha_inicio.ToShortDateString())); 
	             lista.Add(new ClsParametros("@Fecha_fin", fecha_fin.ToShortDateString())); 
	             lista.Add(new ClsParametros("@Entregado", entregado.ToString())); 
	             lista.Add(new ClsParametros("@Fisico", fisico.ToString()));
                 lista.Add(new ClsParametros("@Estatus2", estatus2.ToString()));

                DataTable datos = conexion.Datatable_standart("sp_RH_Empleado_AddUsuario", lista);
                DataRow[] array = new DataRow[datos.Rows.Count];
                datos.Rows.CopyTo(array, 0);
                object[] Info = datos.Rows[0].ItemArray;
                id_actual = int.Parse(Info[0].ToString().Trim());
                id2 = int.Parse(Info[1].ToString().Trim());
                id3 = int.Parse(Info[2].ToString().Trim());
                fecha = DateTime.Parse(Info[3].ToString().Trim());
               return true;
            }
            catch
            {
                return false;
            }
        }

        #region consultadatos
             //Obtiene la lista de las sucursales para presentarla en cmbSucursales
            public DataTable ObtieneSucursales() {

                DataTable X = conexion.Datatable_standart("sp_RH_Cat_Sucursales"); 
                return X;
            }

            public DataTable ObtieneDepartamento() 
            {
                DataTable X = conexion.Datatable_standart("sp_RH_Cat_Departamento");
                return X;
            }
            public DataTable ObtieneEmpresa() 
            {
                DataTable X = conexion.Datatable_standart("sp_RH_Cat_Empresas");
                return X;           
            }
          
            //Obtiene lista de empleados para presentarla en cmbJefe
            public DataTable ObtieneEmpleados(string suc) {

                List<ClsParametros> lista = new List<ClsParametros>();
                lista.Add(new ClsParametros("@sucursal", suc));
                DataTable X = conexion.Datatable_standart("sp_RH_Empleado_Lista", lista);

                DataColumn columna = new DataColumn();
                columna.ColumnName = "nombre_apellidos";
                columna.Expression = string.Format("nombre +' '+ apellidos");
                X.Columns.Add(columna);
                return X;
            }
           
            //Obtiene los datos del sueldo y contrato activo del empleado
            public objRH ObtieneSueldoContrato(int id) {
                try
                {
                    objRH obj = new objRH();

                    List<ClsParametros> lista = new List<ClsParametros>();
                    
                    lista.Add(new ClsParametros("@ID", id.ToString()));
                    DataTable X = conexion.Datatable_standart("sp_RH_Empleado_Consulta_Sueldo_Contrato", lista);
                   
                    DataRow[] array = new DataRow[X.Rows.Count];
                    X.Rows.CopyTo(array, 0);
                    object[] Info = X.Rows[0].ItemArray;

                    obj.IdContrato = int.Parse(Info[0].ToString().Trim());
                    obj.Id_Empleado = int.Parse(Info[1].ToString().Trim());

                    obj.Tipo = Info[2].ToString().Trim();
                    obj.Fecha_Inicio = DateTime.Parse(Info[3].ToString().Trim());
                    obj.Fecha_Fin = DateTime.Parse(Info[4].ToString().Trim());
                    
                    obj.Entregado =int.Parse(Info[5].ToString().Trim());
                    obj.Fisico = int.Parse(Info[6].ToString().Trim());
                    obj.Estatus_Contrato= int.Parse(Info[7].ToString().Trim());
                    obj.IdSueldo = int.Parse(Info[8].ToString().Trim());
                    obj.Sueldo_Mensual =string.Format("{0:c}" ,Info[10].ToString().Trim());
                    obj.Sueldo_Quincenal = Info[11].ToString().Trim();
                    obj.Fecha = DateTime.Parse(Info[12].ToString().Trim());
                    //obj.Estatus_Sueldo = int.Parse(Info[13].ToString().Trim());
                    obj.Bono = Info[14].ToString().Trim();
                    obj.Salario_dia= Info[15].ToString().Trim();
                   
                    return obj;
                }
                catch { return null; }                
            }
           
            //Obtiene los datos del empleado de la tabla cat_empleados
            public objRH ObtieneEmpleado(int id) {
                try
                {
                    objRH obj = new objRH();

                    List<ClsParametros> lista = new List<ClsParametros>();

                    lista.Add(new ClsParametros("@ID", id.ToString()));
                    DataTable X = conexion.Datatable_standart("sp_RH_Empleado_Consulta_Usuario", lista);
                    DataRow[] array = new DataRow[X.Rows.Count];
                    X.Rows.CopyTo(array, 0);
                    object[] Info = X.Rows[0].ItemArray;
                    obj.Id_Empleado = int.Parse(Info[0].ToString().Trim());
                    obj.SucId = Info[1].ToString().Trim();
                    obj.IdJefe = int.Parse(Info[2].ToString().Trim());

                    obj.Nombre= Info[3].ToString().Trim();
                    obj.Apellidos= Info[4].ToString().Trim();
                    obj.Puesto=Info[5].ToString().Trim();
                    obj.FechaIngreso = DateTime.Parse(Info[6].ToString().Trim());
                    obj.Id_Departamento= Convert.ToInt32(Info[7].ToString().Trim());
                    obj.Cuenta_Banco= Info[8].ToString().Trim();
                    obj.id_empresa =Convert.ToInt32(Info[10].ToString().Trim());
                    obj.Nombre_Sucursal = Info[11].ToString().Trim();
                    obj.Departamento = Info[12].ToString().Trim();
                    obj.Nombre_empresa = Info[13].ToString().Trim();
                    return obj;
                }
                catch { return null; }
            }
        /*MANDA UN DATATABLE OBTIENE UN EMPLEADO*/
            public DataTable DatosEmpleado(int id)
            {
                try
                {
                    objRH obj = new objRH();

                    List<ClsParametros> lista = new List<ClsParametros>();

                    lista.Add(new ClsParametros("@ID", id.ToString()));
                    DataTable X = conexion.Datatable_standart("sp_RH_Empleado_Consulta_Usuario", lista);
                   
                    return X;
                }
                catch { return null; }
            }

            public DataTable DatosSueldoContrato(int id)
            {
                try
                {
                    objRH obj = new objRH();

                    List<ClsParametros> lista = new List<ClsParametros>();

                    lista.Add(new ClsParametros("@ID", id.ToString()));
                    DataTable X = conexion.Datatable_standart("sp_RH_Empleado_Consulta_Sueldo_Contrato", lista);
              
                    return X;
                }
                catch { return null; }
            }
           
         #endregion
    
        #region modifica

        //Modifica los datos de los empleados 
        public bool ModificaDatos( int id, string nombre, string apellidos, string puesto, string departamento,string idsucursal, int idjefe, string cuenta_banco, string empresa) {
           
            try
            {

                List<ClsParametros> lista = new List<ClsParametros>();

                //cat_empleados
                lista.Add(new ClsParametros("@ID", id.ToString()));
                lista.Add(new ClsParametros("@id_sucursal", idsucursal.ToString()));
                lista.Add(new ClsParametros("@id_jefe", idjefe.ToString()));
                lista.Add(new ClsParametros("@nombre", nombre));
                lista.Add(new ClsParametros("@apellidos", apellidos));
                lista.Add(new ClsParametros("@puesto", puesto));
                lista.Add(new ClsParametros("@departamento", departamento));
                lista.Add(new ClsParametros("@cuenta_banco", cuenta_banco));
                lista.Add(new ClsParametros("@empresa", empresa));

                bool resp = conexion.Procedure_standart("sp_RH_Empleado_Modifica_catEmpleados", lista);
                return true;
            }
           catch
           {
               return false;
           }
        
        }
      
        //Modifica el sueldo
        public bool ModificaSueldo(int id_empleado,int IdSueldo, string mensual, string quincenal,string bono, DateTime fecha, string dia) 
        {
            try
            {
                List<ClsParametros> lista = new List<ClsParametros>();
             
                lista.Add(new ClsParametros("@ID_empleado", id_empleado.ToString()));
                lista.Add(new ClsParametros("@ID_sueldo", IdSueldo.ToString()));
                lista.Add(new ClsParametros("@mensual", mensual));
                lista.Add(new ClsParametros("@quincenal", quincenal));
                lista.Add(new ClsParametros("@fecha", fecha.ToShortDateString()));
                lista.Add(new ClsParametros("@estatus", "0"));
                lista.Add(new ClsParametros("@estatus1","1"));
                lista.Add(new ClsParametros("@bono", bono));
                lista.Add(new ClsParametros("@salario_dia", dia));

                DataTable datos = conexion.Datatable_standart("sp_RH_Empleado_Modifica_Sueldo", lista);
                DataRow[] array = new DataRow[datos.Rows.Count];
                datos.Rows.CopyTo(array, 0);
                object[] Info = datos.Rows[0].ItemArray;
                id_actual = int.Parse(Info[0].ToString().Trim());
                fecha = DateTime.Parse(Info[1].ToString().Trim());
                return true;
            }
            catch { return false; }
        }
       
        //Modifica contrato
        public bool ModificaContrato(int id_empleado,int idcontrato,string tipo, DateTime fecha_inicio, DateTime fecha_fin, int entregado, int fisico)
        {
            try
            {
                List<ClsParametros> lista = new List<ClsParametros>();
              
                lista.Add(new ClsParametros("@ID_empleado", id_empleado.ToString()));
                lista.Add(new ClsParametros("@ID_contrato", idcontrato.ToString()));
                lista.Add(new ClsParametros("@tipo", tipo));
                lista.Add(new ClsParametros("@fecha_inicio", fecha_inicio.ToShortDateString()));
                lista.Add(new ClsParametros("@fecha_fin", fecha_fin.ToShortDateString()));
                lista.Add(new ClsParametros("@entregado", entregado.ToString()));
                lista.Add(new ClsParametros("@fisico", fisico.ToString()));
                lista.Add(new ClsParametros("@estatus", "0"));
                lista.Add(new ClsParametros("@estatus1", "1"));
      
                DataTable datos = conexion.Datatable_standart("sp_RH_Empleado_Modifica_Contrato", lista);
                DataRow[] array = new DataRow[datos.Rows.Count];
                datos.Rows.CopyTo(array, 0);
                object[] Info = datos.Rows[0].ItemArray;
                id_actual = int.Parse(Info[0].ToString().Trim());
                fecha = DateTime.Parse(Info[1].ToString().Trim());
                return true;
            }
            catch { return false; }
        
        } 
        
        //Da de baja al empleado, cambia el estatus a 0, solo en la tabla cat_empleados el estatus en sueldo y contrato se queda 1 para llevar control del ultimo contrato y sueldo
        public bool BajaEmpleado(int id_empleado) {
            try
            {
                List<ClsParametros> lista = new List<ClsParametros>();
	            lista.Add(new ClsParametros("@id",id_empleado.ToString()));
                bool resp = conexion.Procedure_standart("sp_RH_Empleado_Modifica_Estatus", lista);
                return true;
            }
            catch { return false; }
        }
        
        #endregion

        public DataTable ObtieneEmpresas()
        {

            DataTable X = conexion.Datatable_standart("sp_RH_Cat_Empresas");
            return X;
        }
      
    }
}
